import tkinter
from mazebuild import *
from plotmaze import plot2DBase, plotMaze
from astarrun import *
from tkinter import messagebox

if __name__ == '__main__':
    length = 40
    width = 60  # 长为60，宽为40,40*60的地图
    percent = 0.3   # 生成的障碍物数量的比例大约为30%，可重复在同一位置

    obstacle, startPoint, endPoint = mazeBuild(length, width, percent)  # 根据二维地图生成障碍物与随机起点终点
    aStar = Astar(obstacle, Node(point(startPoint[0], startPoint[1])), Node(point(endPoint[0], endPoint[1])), length,
                  width)
    # 调用astarrun的Astar类，初始化一个该类实例astar
    # 第一个参数是障碍物列表，第二个参数是Node格式的起点，第三个参数是Node格式的终点，第三个参数为横轴x，第四个即纵轴y
    path = aStar.run()  # 调用Astar类成员的启动函数，进行A*算法计算，返回路径点列表

    pathList = []
    if not path:
        plotMaze(obstacle, startPoint, endPoint, length, width)
        tkinter.messagebox.showinfo("该地图未找到路径", "起始点或终止点与障碍物重合，或者实际上并没有通路")
        # 当起始点与终止点与障碍物重合，或者实际上并没有通路时报错
    else:
        for i in path:
            pathList.append((i.point.x + 0.5, i.point.y + 0.5))
        plot2DBase(obstacle, pathList, startPoint, endPoint, length, width)
        # 调用plotmaze 中的plot2DBase函数，进行路径绘制

